package pluginUtils;

public class Droite {
	
	/**
	 * @param a
	 * @param b
	 */
	public Droite(double a, double b) {
		A = a;
		B = b;
	}

	private double A,B; 
	
	/** Equation d'une droite passante par deux points*/
	public Droite(Point2D P1,Point2D P2){
		double u=P1.getX(); 
		double v=P1.getY(); 
		double up=P2.getX(); 
		double vp=P2.getY(); 
		this.A=(vp-v)/(up-u); 
		this.B=v-this.A*u; 
	}
	
	/* Equation d'une droite passant par un point, connaissant la pente */
	public Droite(Point2D p,double angle){
		this.A=Math.tan(angle);
		this.B=p.getY()-this.A*p.getX(); 
	}
	
	
	static public Point2D intersection(Droite D1,Droite D2){
		double a=D1.A; 
		double b=D1.B; 
		double ap=D2.A; 
		double bp=D2.B; 
		double x=(b-bp)/(ap-a); 
		double y=(b*ap-bp*a)/(ap-a); 
		return new Point2D(x,y); 
	}
	
	static public Droite droiteOrthogonale(Droite D,Point2D A){
		double u=1; 
		double v=D.A; 
		double NA=-u/v;
		double x0=A.getX(); 
		double y0=A.getY(); 
		double NB=(u*x0+v*y0)/v;
		return new Droite(NA,NB);
	}
	
	public String toString(){
		return "y="+A+"*x+"+B; 
	}

	public double getY(double x){
		return A*x+B; 
	}
	
	public double getX(double y){
		return (y-B)/A;
	}
	
	static public double angle(Droite d1,Droite d2){
		return Math.atan2(d2.A-d1.A,1+d1.A*d2.A);
	}
	
}
